一般來說,每個應用程式都是獨立的個體,平常不會互相影響,避免有心懷不軌的的應用程式搞破壞,但有些時候我們會需要在不同的應用程式之間共享資料,像是 Android 就有提供鬧鐘設定、行事曆、聯絡人資料等,這個時候 Content Provider 就派上用場了。
Content Provider 可以幫助我們管理與其他應用程式的存取,並提供共享資料的方法,它是透過定義統一的訪問接口來完成,像是使用 CURD 如新增(insert)、刪除(delete)、修改(update)、查詢(query)這種操作,而且會對資料進行封裝,提供定義資料安全的機制,所以可以不用擔心開放資料存取權限而產生的資安問題。
我們如果想要訪問其他應用程式的 Content Provider 的話,會透過 URI 的機制,URI(統一資源標識符) 是用於標識某一網際網路資源名稱的字串,該種標識允許使用者對網路中的資源通過特定的協定進行互動操作,我們把資料用 URI 的型態來標示,這樣其他的應用程式就可以用同一套標準的 URI 規範來處理資料,以 Android 系統來說,URI 大概會分三個區塊:scheme、authonity 與 path。
如果需要提供 Content Provider 中的資料,我們可以使用 Context 中的 ContentResolver 來操作,ContentResolver可以分析 URI 中的 authority,並且將請求發送到 authority 的 Content Provider ,Content Provider 會再去分析 URI 後段如 path 的部分。
其中的 CursorLoader 是 AsyncTaskLoader 的子類,用於異步加載 ContentProvider 的數據。該類會查詢 ContentResolver 並返回 Cursor。
Content provider basics - Android Developers
URI - wiki
Loaders